For all types of computer systems, memory can be a limited resource. No matter how fast computing systems become, there is always a dependence on a finite amount of memory in which to run software applications. As a result, software developers typically consider available memory resource when writing and developing software applications.
The JAVA programming language presents several features that appeal to developers of large-scale distributed systems, such as write once, run anywhere portability, portable support for multithreaded programming, and support for distributed programming, including remote method invocation and garbage collection. However, JAVA differs from many traditional programming languages in the way in which memory is allocated and de-allocated. Many programming languages, such as C and C++, explicitly allow for the allocation and de-allocation of memory by the application programmer/developer. In contrast, JAVA virtual machines (“VM”s) manage memory via structures which are deliberately opaque to programmers of JAVA applications. This opacity is problematic when running scripts in a shared user environment, such as a server VM, as one thread running out of memory has the potential of corrupting other running threads. This cross-thread contamination can cause the entire JAVA VM to be shut down.